package com.sl.hx.shop.http;

import android.text.TextUtils;
import android.util.Log;

import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

/**
 * 拦截器工具类
 * <p>
 * Created by hwg on 2017/12/20.
 */

public class InterceptorUtils {

    public static final String TAG = "hwg";

    /**
     * 日志拦截器
     * @return
     */
    public static HttpLoggingInterceptor loggingInterceptor() {
        return new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
            @Override
            public void log(String message) {
                if (TextUtils.isEmpty(message)) {
                    return;
                } else {
                    String firstChar = message.substring(0, 1);
                    if (firstChar.equals("{") || firstChar.equals("[")){
                        Log.i(TAG, message) ;
                    }
                }
            }
        }).setLevel(HttpLoggingInterceptor.Level.BODY);
    }

    /**
     * 请求参数拦截器
     * @return
     */
    public static Interceptor requestInterceptor(){
        return new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request request = chain.request();
                long startTime = System.currentTimeMillis();
                Response response = chain.proceed(chain.request());
                long endTime = System.currentTimeMillis();
                long duration=endTime-startTime;
                MediaType mediaType = response.body().contentType();
                String content = response.body().string();
                Log.d(TAG,"\n");
                Log.d(TAG,"----------Start----------------");
                Log.d(TAG, "| "+request.toString());
                String method=request.method();
                if("POST".equals(method)){
                    StringBuilder sb = new StringBuilder();
                    if (request.body() instanceof FormBody) {
                        FormBody body = (FormBody) request.body();
                        for (int i = 0; i < body.size(); i++) {
                            sb.append(body.encodedName(i) + "=" + body.encodedValue(i) + ";");
                        }
                        sb.delete(sb.length() - 1, sb.length());
                        Log.d("requestParams", "| RequestParams:{"+sb.toString()+"}");
                    }
                }
//                Log.d(TAG, "| Response:" + content);
//                Log.d(TAG,"----------End:"+duration+"毫秒----------");
                return response.newBuilder()
                        .body(okhttp3.ResponseBody.create(mediaType, content))
                        .build();
            }
        } ;
    }

}
